/*
 * InvertedListRecordListSerializer.h
 *
 *  Created on: Nov 30, 2012
 *      Author: m
 */

#ifndef INVERTEDLISTRECORDLISTSERIALIZER_H_
#define INVERTEDLISTRECORDLISTSERIALIZER_H_

#include "Serializer.h"
#include "InvertedListRecordSerializer.h"
#include "../file_system/InvertedList.h"

namespace physical
{

class InvertedListRecordListSerializer: public physical::Serializer< InvertedListRecordList >
{
public:

    /**
     * Constructor
     */
    InvertedListRecordListSerializer();

    /**
     * Destructor
     */
    virtual ~InvertedListRecordListSerializer();

    /**
     * Serializa un Elemento
     *
     * @param element Elemento a serializar
     * @param block Array de bytes en donde se serializa el elemento
     * @return Cantidad de bytes escritos en el block
     */
    size_t serialize( const InvertedListRecordList& element, byteStream block );

    /**
     * Deserializa un Elemento
     *
     * @param block Array de bytes donde está serializado el elemento
     * @param element Referencia al elemento deserializado
     * @return Cantidad de bytes utilizados de block para deserializar
     */
    size_t deserialize( const byteStream block,
            InvertedListRecordList& element );

    /**
     * Devuelve la cantidad de bytes que ocupa el elemento al ser serializado
     *
     * @param element Elemento a probar
     * @return Cantidad de bytes que ocuparía el elemento serializado
     */
    size_t getSize( const InvertedListRecordList& element );

protected:
    std::unique_ptr< Serializer< InvertedListRecord > > m_recordSerializer;
};

} /* namespace physical */
#endif /* INVERTEDLISTRECORDLISTSERIALIZER_H_ */
